第 1 步 - 创建状态机控制应用程序状态
在本教程的这一步骤中,您创建状态机控制切换按钮,该按钮可打开/关闭显示身体、腿部和挡风玻璃的空调指示灯。您将创建设置指示灯何时可见的状态组和状态。您还将创建用于控制空调档位指示灯的属性类型。
教程资产
<KanziWorkspace>/Tutorials/State managers/Completed 目录包含本教程已完成的 Kanzi Studio 工程。
本教程的起点资料是存储在 <KanziWorkspace>/Tutorials/State managers/Assets 目录中的 State managers.kzproj Kanzi Studio 工程。该工程包含完成本教程所需的节点:
- 名为Legs 的 2D 切换按钮 (Toggle button 2D) 节点包含显示腿部空调的指示灯图像。
- 名为Body 的 2D 切换按钮 (Toggle button 2D) 节点包含显示身体空调的指示灯图像。
- 名为Shield 的 2D 切换按钮 (Toggle button 2D) 节点包含显示挡风玻璃空调的指示灯图像。
- 名为AirCondition level 的 2D 堆栈布局 (Stack Layout 2D) 节点包含该应用程序用户界面的背景图像和图像节点,其中包含:
- 2D 按钮 (Button 2D) 节点,用于名为 Level 1、Level 2、Level 3 和 Level 4 的各空调档位指示灯。
每个2D 按钮 (Button 2D) 节点包含该按钮显示的档位指示灯图像。
为空调状态创建状态机
您可以使用状态机在应用程序中创建不同的状态。例如,您可以定义不同状态下按钮的外观和行为,例如当用户按下开按钮时,按钮如何反应。
在本节中,您将在应用程序中创建状态机和状态组,以控制空调指示灯的状态。使用状态机设置每个切换按钮中的图像何时可见。
要创建状态机:
- 在 Kanzi Studio 中打开存储在 <KanziWorkspace>/Tutorials/State managers/Assets 目录中的 State managers.kzproj 工程。
- 在素材库 (Library) 按下 Alt 并右键点击状态机 (State Managers) 中,选择状态机 (State Manager) 以创建状态机,并将其命名为 AC Controls。
- 在素材库 (Library) > 状态机 (State Managers) > AC Controls 中,选择状态组 (State Group),按下 F2 并将其重命名为 Indicators,将这两个状态重命名为 On 和 Off。
状态组包含各种状态,定义控制器属性和状态组中状态之间的迁移。使用Indicators 状态组设置身体、腿部和挡风玻璃指示灯图像何时可见。
- 在素材库 (Library) > 状态机 (State Managers) > AC Controls 中选择 Indicators 状态组并在属性 (Properties) 中设置:
- 控制器属性 (Controller Property) 为ButtonConcept.ToggleState (Toggle State)
状态机使用控制器属性 (Controller Property) 设置该状态组中哪个状态活跃。您可以在这里使用切换状态 (Toggle State) 属性迁移到基于该属性值的状态。
AC Controls 状态机和Indicators 状态组显示为红色,直到为每个状态设置 切换状态 (Toggle State)。 - 初始状态 (Initial State) 为AC Controls/Indicators/Off。
初始状态是应用程序首次启动时使用的状态。将空调设置为关闭,直到用户点击其中一个指示灯按钮。
- 在素材库 (Library) > 状态机 (State Managers) > AC Controls > Indicators 中选择On 状态并在属性 (Properties) 中将切换状态 (Toggle State) 属性设置为 1。
切换状态 (Toggle State) 属性在Off 状态默认设置为 0。
- 在On 状态按下 Alt 并右键点击,选择状态对象 (State Object) 以创建 状态对象 (State Object),将其命名为 IndicatorVisible,并在属性 (Properties) 中:
- 将目标对象路径 (Target Object Path) 设为 ./图像 (Image)
- 添加并启用可见性 (Visible) 属性。
状态对象定义特定状态的节点属性。在工程 (Project) 中,Body、Legs 和 Shield 节点各包含一张名为图像 (Image) 的图像。目标对象路径 (Target Object Path) 指向所有这些图像,并将其设置为可见。
- 为Off 状态重复上一步骤,但将状态对象命名为 IndicatorInvisible,确保可见性 (Visible) 属性被禁用。
- 在工程 (Project) 中选择 Legs、Body 和 Shield 节点,在属性 (Properties) 中添加状态机 (State Manager) 属性,并将其设置为 AC Controls。
通过设置状态机 (State Manager) 属性值,您可以设置状态机以控制所选节点及其子树。这种情况下,设置 AC Controls 状态机,以控制设置空调状态的指示灯按钮。
定义档位按钮的状态
在本节中,您将学习创建属性类型,将其用于档位按钮的触发器中,来设置档位指示灯的状态。在AC Controls 状态机中创建另一个状态组。该状态组控制显示当前空调档位的指示灯。
要定义档位按钮的状态:
- 在素材库 (Library) > 属性类型 (Property Types) 中按下 Alt 并右键点击以创建属性类型,并在属性类型编辑器 (Property Type Editor) 中设置:
- 名称 (Name) 为Statemanagers.Level
- 数据类型 (Data Type) 为枚举 (Enumeration)
枚举 (Enumeration) 存储一组键值对,使每个唯一的键值解析为一个唯一的整数。 - 编辑器 (Editor) 为枚举下拉菜单 (Enumeration dropdown)
- 枚举选项 (Enumeration Options)
- 键 (Key) 为Level 1 和值 (Value) 为 0
- 键 (Key) 为Level 2 和值 (Value) 为 1
- 键 (Key) 为Level 3 和值 (Value) 为 2
- 键 (Key) 为Level 4 和值 (Value) 为 3
- 默认值 (Default Value) 为Level 1
点击保存 (Save)。
- 在素材库 (Library) > 状态机 (State Managers)中按下 Alt 并右键点击AC Controls状态机,选择 状态组 (State Group) 并将其命名为 Level。
使用 Level 状态组控制当用户点击档位按钮时哪些档位指示灯可见。
- 在素材库 (Library) > 状态机 (State Managers) > AC Controls 中选择 Level 状态组,并在属性 (Properties) 中将控制器属性 (Controller Property) 设置为Statemanagers.Level。
- 在 Level 状态组创建状态,并将其命名为 1,设置当应用程序处于该状态时哪些指示灯可见:
- 选择Level > 1 状态并在属性 (Properties) 中将控制器属性 (Controller Property) 设置为Level 1。
- 在Level > 1 状态为三张用于指示空调档位的图像各创建一个 状态对象 (State Object):
- AC Active Level 2
- AC Active Level 3
- AC Active Level 4
1 档 (Level 1) 无需状态机中的状态对象 (State Object),因为当用户打开空调时使用图像将第一个指示条显示为绿色。
- 对于属性 (Properties) 中的每个状态对象 (State Object),将目标对象路径 (Target Object Path) 设置为指向工程 (Project) > AirCondition level > Level buttons 中的正确图像:
- 对于 AC Active Level 2,将目标对象路径 (Target Object Path) 设置为Level 2/AC Active Level 2 节点
- 对于 AC Active Level 3,将目标对象路径 (Target Object Path) 设置为Level 3/AC Active Level 3 节点
- 对于 AC Active Level 4,将目标对象路径 (Target Object Path) 设置为Level 4/AC Active Level 4 节点
- 对于每个状态对象 (State Object) 添加可见性 (Visible) 属性,并确保已禁用。
当应用程序处于 1 状态,档位指示灯不可见。
- 在 Level 状态组中选择 1 状态,按下 Ctrl D 三次以复制该状态,并将这三个状态命名为 2、3 和 4。
- 选择在上一步骤中创建的每个新状态,在属性 (Properties) 中设置 控制器属性 (Controller Property):
- 对于 2 状态,设置为Level 2
- 对于 3 状态,设置为Level 3
- 对于 4 状态,设置为Level 4
- 设置在各状态下哪些档位按钮可见:
- 在工程 (Project) 中选择 AirCondition level > Level buttons,在属性 (Properties) 中添加状态机 (State Manager),并将其设置为 AC Controls。
您可以设置状态机以控制所选节点及其子树。这种情况下,设置 AC Controls 状态机,以控制设置空调档位的指示灯按钮。
- 为档位按钮创建触发器,以打开/关闭指示灯:
- 在工程 (Project) 中选择 Level 1 按钮,在节点组件 (Node Components) 部分的按钮: 点击 (Button:Click) 触发器中点击下拉菜单,选择设置属性 (Set Property) 动作,然后设置:
- 目标项 (Target Item) 为 <Relative> ..
- 目标属性 (Target Property) 为Statemanagers.Level
- 目标属性特性 (Target Property Attribute) 为整体属性 (Whole property)
- 起始值 (Value From) 为固定值 (Fixed Value)
- 固定值 (Fixed Value) 为Level 1
使用设置属性 (Set Property) 动作设置当 Statemanagers.Level 属性值更改时应用程序的状态。
- 在节点组件 (Node Components) 中右键点击按钮: 点击 (Button:Click) 触发器并选择复制 (Copy)。
- 在工程 (Project) 中粘贴触发器到 Level 2、Level 3 和Level 4 节点,但在设置属性 (Set Property) 动作中将固定值 (Fixed Value) 设置为 Level 2、Level 3 和 Level 4。
< 简介
下一步 >
另请参阅
状态机
使用状态机
使用状态迁移
创建属性类型
打开导航